package utils

import (
	"bytes"
	"fmt"
	"math/rand"
	"strconv"
	"strings"
	"time"
)

var (
	headerNums = [...]string{"139", "138", "137", "136", "135", "134", "159", "158", "157", "150", "151", "152", "188", "187", "182", "183", "184", "178", "130", "131", "132", "156", "155", "186", "185", "176", "133", "153", "189", "180", "181", "177"}
)

func MapToUrl(param map[string]string) []byte { // map转成 字符串拼接类型 a=1&b=2
	var buffer bytes.Buffer
	start := 0
	for i, j := range param {
		if start == len(param)-1 {
			buffer.WriteString(i + "=" + j)
		} else {
			buffer.WriteString(i + "=" + j + "&")
		}
		start += 1
	}
	return buffer.Bytes()
}

func ValueToString(value interface{}) string {
	var valueString string
	switch v := value.(type) {
	case string:
		valueString = v
	case int:
		valueString = strconv.Itoa(v)
	case float64:
		valueString = strconv.FormatFloat(v, 'f', -1, 64)
	}
	return valueString
}

func GetTimeStamp() int64 {

	return time.Now().Unix()
}

func GetRandIp() string {
	rand.Seed(time.Now().UnixNano())
	return fmt.Sprintf("%d.%d.%d.%d", rand.Intn(255), rand.Intn(255), rand.Intn(255), rand.Intn(255))
}

func GetRandPhone() string {
	headerNumsLen := len(headerNums)
	header := headerNums[rand.Intn(headerNumsLen)]
	body := fmt.Sprintf("%08d", rand.Intn(99999999))
	phone := header + body
	return phone
}

func GetRandStringWithMaxAndMin(pre string, size int) {

}

func GetRandIntWithRange(max int, min int) int {
	rand.Seed(time.Now().UnixNano())
	return rand.Intn(max-min) + min

}
func GetRandInt() int {
	rand.Seed(time.Now().UnixNano())
	return rand.Int()

}

func RandString(lenNum int) string {
	var chars = []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}
	str := strings.Builder{}
	length := len(chars)
	rand.Seed(time.Now().UnixNano()) //重新播种，否则值不会变
	for i := 0; i < lenNum; i++ {
		str.WriteString(chars[rand.Intn(length)])

	}
	return str.String()
}
